package practica1.ui.tablaPoblacion;

import practica1.language.Language;

/**
 * Factoría para crear el modelo de la tabla
 * @author Miguel González - Ceura
 */
public class ModeloPoblacionFactory {

    /**
     * Devuelve un modelo de la tabla por defecto
     * @return ModeloPoblacionTabla
     */
    public static ModeloPoblacionTabla crearModeloTablaDefecto(int diasDuracion) {
        
        String numDias[] = new String[diasDuracion];
        for(int i=1; i<=diasDuracion; i++) {
            numDias[i-1] = i + "";
        }
        
        //Cargamos las dosis de comida automáticamente
        String dosisComida[] = crearDosisComidaModeloDefecto(150,150,15,150,
                diasDuracion);
        
        String tamanioPoblacion[] = new String[diasDuracion];
        for(int i=0; i<diasDuracion; i++) {
            tamanioPoblacion[i] = "";
        }

        String bacteriasMuertas[] = new String[diasDuracion];
        for(int i=0; i<diasDuracion; i++) {
            bacteriasMuertas[i] = "";
        }
        
        String temperatura[] = new String[diasDuracion];
        
        for(int i=0; i<diasDuracion; i++) {
            temperatura[i] = "";
        }
        
        String datosModelo[][] = new String[diasDuracion][5];
        
        for(int i=0; i<diasDuracion; i++) {
            datosModelo[i][0] = numDias[i];
            datosModelo[i][1] = tamanioPoblacion[i];
            datosModelo[i][2] = bacteriasMuertas[i];
            datosModelo[i][3] = temperatura[i];
            datosModelo[i][4] = dosisComida[i];
        }
        
        
        return new ModeloPoblacionTabla(datosModelo, new String[]{
            Language.getI().getP("DIA"),
            Language.getI().getP("TAMANIO_POBLACION"),
            Language.getI().getP("BACTERIAS_MUERTAS"),
            Language.getI().getP("TEMPERATURA"),
            Language.getI().getP("DOSIS_COMIDA")});
    }
    
    /**
     * Devuelve un array de String con los cálculos de las dosis de comida
     * @param alimentoInicial Alimento inicial
     * @param alimentoMax Alimento máximo
     * @param diaMax Día máximo
     * @param alimentoFinal Alimento Final
     * @return String[] dosisComida
     */
    public static String[] crearDosisComidaModeloDefecto(
            int alimentoInicial, int alimentoMax, int diaMax, int alimentoFinal,
            int numDias) {
        String []dosisComida = new String[numDias];
        
        //Cuenta incremental hasta diaMax
        dosisComida[0] = Integer.toString(alimentoInicial);
        if(diaMax != 1) {
            float incrementar = (alimentoMax - alimentoInicial) / (float)(diaMax - 1);
            for(int i=1; i < diaMax; i++) {
                dosisComida[i] = Integer.toString(alimentoInicial +
                        (int)(Math.round(incrementar * i)));
            }
        }
        
        //Cuenta deincremental hasta el último día
        dosisComida[diaMax] = Integer.toString(alimentoMax);
        if(diaMax != numDias-1) {
            float reducir = (alimentoMax - alimentoFinal) / (float)(numDias
                    - diaMax);
            for(int i=diaMax; i < numDias; i++) {
                dosisComida[i] = Integer.toString(alimentoMax - 
                        (int)(Math.round(reducir * (i - diaMax + 1))));
            }
        }
        
        return dosisComida;
    }
}
